﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Web.Framework;
using WebAppPlanProduccion.Code;
using PlanProd.Contracts;

using PlanProd.Contracts.enums;
using WebAppPlanProduccion.Code.Security;
using Web.Framework.Svc;

namespace WebAppPlanProduccion.App
{
    public partial class PresupuestoProduccionList : BasePage
    {     
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                EsPaginaQueRecurdaFiltros = true;
                HasPermissionToSeeMe(PlanProdSecurity.PRESUPUESTOPRODUCCION_VER);

                if (!this.IsPostBack)
                {
                    UIHelper.LoadTemporadas(this.cboTemporada);
                    UIHelper.LoadDestinos(this.cboDestino, "Todos");
                    UIHelper.LoadProveedores(this.cboProveedor, "Todos");
                    UIHelper.LoadEstadoAprobado(this.cboEstado, "Todos");
                }

                hasPermissionForAprobar = HasPermissionFor(PlanProdSecurity.PRESUPUESTOPRODUCCION_APROBAR);
                hasPermissionForVerPlanProduccion = HasPermissionFor(PlanProdSecurity.PLANPRODUCCION_VER);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        private bool hasPermissionForAprobar = false;
        private bool hasPermissionForVerPlanProduccion = false;

        private List<LinkButton> actionButtons = new List<LinkButton>();
        LinkButton nuevoButton = new LinkButton();
        LinkButton bajarArchivoDeEjemploPlanillaButton = new LinkButton();
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            nuevoButton.ID = "BoCommandNuevo";
            nuevoButton.Text = "Nuevo";
            nuevoButton.Click += new EventHandler(lnkCrearPresupuestoProd_Click);
            actionButtons.Add(nuevoButton);

            bajarArchivoDeEjemploPlanillaButton.ID = "BoCommandBajarEjemplo";
            bajarArchivoDeEjemploPlanillaButton.Text = "Bajar Excel de Ejemplo";
            bajarArchivoDeEjemploPlanillaButton.ClientIDMode = System.Web.UI.ClientIDMode.Static;
            bajarArchivoDeEjemploPlanillaButton.OnClientClick = "location.href = '/SampleFiles/EjPresupuestoComercialIndividual.xlsx'; return false;";
            actionButtons.Add(bajarArchivoDeEjemploPlanillaButton);                       

            base.LoadContextActions(actionButtons);
        }

        protected override void ApplySecurity()
        {
            this.lnkCrearPresupuestoProd.Visible = HasPermissionFor(PlanProdSecurity.PRESUPUESTOPRODUCCION_CREAR);

            if (this.GridPresupuestoProduccion.DataSource != null)
            {
                this.GridPresupuestoProduccion.Columns[0].Visible = HasPermissionFor(PlanProdSecurity.PRESUPUESTOPRODUCCION_EDITAR);
                this.GridPresupuestoProduccion.Columns[1].Visible = HasPermissionFor(PlanProdSecurity.PRESUPUESTOPRODUCCION_ELIMINAR);
                this.GridPresupuestoProduccion.Columns[2].Visible = HasPermissionFor(PlanProdSecurity.PRESUPUESTOPRODUCCION_DETALLE_IMPORTAR);                
            }
        }

        private void Buscar()
        {
            RecordarFiltrosSeleccionados();
            ServiceOptions searchOptions = new ServiceOptions() { PageSize = this.GridPresupuestoProduccion.PageSize, PageNumber = this.GridPresupuestoProduccion.PageIndex };
            var securityContext = GetSecurityContextForDestinos();
            searchOptions.IsAdmin = BaseWebPage.IsAdmin;
            searchOptions.Operations = securityContext.Operations;
            int? presupuestoId = UIHelper.GetIntFromInputText(this.txtPresupuestoId.Text);
            int? temporadaId = UIHelper.GetIntFromInputCbo(this.cboTemporada);
            int? destinoId = UIHelper.GetIntFromInputCbo(this.cboDestino);
            int? proveedorId = UIHelper.GetIntFromInputCbo(this.cboProveedor);
            DateTime? fechaDesde = UIHelper.GetDateTimeFromInputText(this.txtFechaDesde.Text);
            DateTime? fechaHasta = UIHelper.GetDateTimeFromInputText(this.txtFechaHasta.Text);
            EstadoAprobado? estado = (EstadoAprobado?)UIHelper.GetIntFromInputCbo(this.cboEstado);
            string nombre = this.txtNombre.Text;

            this.GridPresupuestoProduccion.DataSource = WebServiceHelper.GetPresupuestosDeProduccion(searchOptions, presupuestoId, nombre, temporadaId, destinoId, proveedorId, estado, fechaDesde, fechaHasta);
            this.GridPresupuestoProduccion.DataBind();
            pnlResults.Visible = true;
        }

        protected void GridPresupuestoProduccion_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                this.GridPresupuestoProduccion.PageIndex = e.NewPageIndex;

                Buscar();
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }        

        protected void GridPresupuestoProduccion_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "editar")
                {
                    int presupuestoProduccionId = Convert.ToInt32(this.GridPresupuestoProduccion.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    this.Response.Redirect(string.Format("/App/PresupuestoProduccionEdit.aspx?Id={0}", presupuestoProduccionId), true);
                }
                else if (e.CommandName == "eliminar")
                {
                    int presupuestoProduccionId = Convert.ToInt32(this.GridPresupuestoProduccion.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    WebServiceHelper.EliminarPresupuestoProduccion(presupuestoProduccionId);
                    Buscar();
                }
                else if (e.CommandName == "aprobar")
                {
                    int presupuestoProduccionId = Convert.ToInt32(this.GridPresupuestoProduccion.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    WebServiceHelper.AprobarPresupuestoProduccion(presupuestoProduccionId, BaseWebPage.CompanyId, BaseWebPage.UserName, true);
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void GridPresupuestoProduccion_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                PresupuestoProduccion presupuestoProduccion = (PresupuestoProduccion)e.Row.DataItem;
                e.Row.Cells[0].Attributes.Add("title", "Editar");
                e.Row.Cells[1].Attributes.Add("title", "Eliminar");
                ImageButton btnEliminarCtrl = (ImageButton)e.Row.FindControl("btnEliminar");
                btnEliminarCtrl.OnClientClick = string.Format("return confirm('Está seguro que desea eliminar el siguiente registro? {0}')", ((PresupuestoProduccion)e.Row.DataItem).Id);                    

                if (presupuestoProduccion.Estado == EstadoAprobado.Aprobado)
                {
                    Panel panelImportar = (Panel)e.Row.FindControl("pnlBtnImportar");
                    panelImportar.Visible = false;
                    e.Row.Cells[3].Attributes.Add("title", "Ver Plan");
                    var panelVerPlan = (Panel)e.Row.FindControl("pnlVerPlan");
                    panelVerPlan.Visible = hasPermissionForVerPlanProduccion;
                }
                else
                {                    
                    e.Row.Cells[3].Attributes.Add("title", "Aprobar");
                    var pnlAprobar = (Panel)e.Row.FindControl("pnlAprobar");
                    pnlAprobar.Visible = hasPermissionForAprobar;
                }
            }        
        }

        protected void lnkBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                Buscar();
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void lnkCrearPresupuestoProd_Click(object sender, EventArgs e)
        {
            this.Response.Redirect("/App/PresupuestoProduccionCreate.aspx", true);
        }       
    }
}